package cn.learn.service;

import cn.learn.domain.ElasticsearchQuery;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * es的操作接口
 *
 * @author huangyezhan
 * @version 1.0
 * @date 2020年06月30日9:16
 */
public interface IHandlerElasticSearchService {
    /**
     * 创建索引映射
     *
     * @param indexName 创建索引的名称
     * @param mapping   索引映射的json字符串
     * @return 是否创建成功
     * @throws IOException IO流异常
     */
    boolean createIndexMapping(String indexName, String mapping) throws IOException;

    /**
     * 删除索引
     *
     * @param index 索引
     * @return 是否删除成功
     * @throws IOException IO流异常
     */
    boolean deleteIndex(String index) throws IOException;

    /**
     * 查询前十
     *
     * @param query 查询对象
     * @return 返回查询结果
     * @throws IOException 流异常
     */
    Map<String, Object> queryTop10(ElasticsearchQuery query) throws IOException;

    /**
     * 获取地图矩形内所有的信息
     *
     * @param query       查询的常用对象
     * @param topLeft     左上角的经纬度
     * @param bottomRight 右下角的经纬度
     * @return 返回查询结果
     * @throws IOException IO流异常
     */
    Map<String, Object> geoBoundingBox(ElasticsearchQuery query, String topLeft, String bottomRight) throws IOException;

    /**
     * 地图多边形查询
     *
     * @param query  查询条件
     * @param points 多边形的点坐标
     * @return 查询结果
     * @throws IOException io流异常
     */
    Map<String, Object> geoPolygon(ElasticsearchQuery query, String[] points) throws IOException;

    /**
     * 异步批量插入数据
     *
     * @param index 索引
     * @param list  数据集合
     * @throws IOException          流异常
     * @throws InterruptedException 中断异常，跟线程有关的异常
     */
    void bulkAsync(String index, List<Map<String, String>> list) throws IOException, InterruptedException;


    /**
     * 政策文件
     *
     * @param query 查询条件
     * @return 返回结果
     * @throws IOException 异常
     */
    Map<String, Object> officialDocument(ElasticsearchQuery query) throws IOException;

}
